#include <iostream>
#include <vector>
#include <string>
#include <cstring>
#include <algorithm>
#include <map>
#include <climits>

using namespace std;
const int _N=1025;
int N,T1,T2,T3,T4;//数量,相同，上，下，切换
int v[_N];
int ans=0x3f3f3f3f;

void dfs(int index,int sd,int cur_time){
    if(N-1==index){
        ans=min(ans,cur_time);
        return;
    }
    if(0==sd){
        if(index+1<N && v[index]==v[index+1]){
            dfs(index+1,sd,cur_time+T1);
        }
        if(index+1<N && 1==v[index]-v[index+1]){
            dfs(index+1,sd,cur_time+T3);
        }
        if(index+1<N && -1==v[index]-v[index+1]){
            dfs(index+1,sd,cur_time+T2);
        }
    }else{
        if(index+1<N && 4-v[index]==4-v[index+1]){
            dfs(index+1,sd,cur_time+T1);
        }
        if(index+1<N && 1==v[index+1]-v[index]){
            dfs(index+1,sd,cur_time+T3);
        }
        if(index+1<N && -1==v[index+1]-v[index]){
            dfs(index+1,sd,cur_time+T2);
        }
    }
    dfs(index+1,1-sd,cur_time+T4);
    
}


int main(){
    cin >> N>> T1 >> T2 >> T3 >> T4;
    for(int i=0;i<N;i++){
        cin >> v[i];
    }
    dfs(0,0,0);
    cout << ans <<endl;

    return 0;
}